#include <memory>
#include <string>
#include <iostream>
#include <pthread.h>
#include "task.hpp"
// #include "threadPool_V1.hpp"
// #include "threadPool_V2.hpp"
// #include "threadPool_V3.hpp"
#include "threadPool_V4.hpp"


using std::cout;
using std::endl;

int main()
{
    // 无单例
    // std::unique_ptr<threadPool<Task>> tp(new threadPool<Task>(20));
    // tp->init();
    // tp->start();
    // tp->check();


    std::string ops = "+-*/%";
    while (true)
    {
        // 主线程充当生产者，不断的获取任务并将任务放到任务队列里。
        // 线程池中的线程相当于消费者，从任务队列中获取任务
        // 1.获取任务
        int x = rand() % 20;
        int y = rand() % 20;
        char op = ops[rand() % ops.size()];
        Task t(x, y, op);
        // tp->pushTask(t); //无单例
        threadPool<Task>::getInstance()->pushTask(t);
        cout << "producer push a task" << t.formatExpression() << "= ?" << endl;
        sleep(1);
    }
    return 0;
}